/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DTO.DichVu_DTO;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author PEKEM
 */
public class DichVu_DAO {

    private static String sqlString;
    private static MSSQLConnect cn;
    private static ResultSet rs;

    public static String layMaCuoiCung() throws Exception {
        String kq;
        kq = null;
        sqlString = "SELECT TOP 1 MaDichVu FROM DICHVU ORDER BY MaDichVu DESC";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                kq = rs.getString("MaDichVu");
            }

        } catch (Exception e) {
            throw new Exception("Không thể lấy mã max");
        } finally {
            cn.Close();
        }
        return kq;
    }
    
    public static ArrayList<DichVu_DTO> layDanhSachMaDichVu() throws Exception {
        ArrayList<DichVu_DTO> danhSachMaDichVu = new ArrayList<>();
        sqlString = "SELECT MaDichVu FROM DICHVU";
        try {
            cn = new MSSQLConnect();
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                DichVu_DTO dv = new DichVu_DTO();
                dv.setMaDichVu(rs.getString("MaDichVu"));
                danhSachMaDichVu.add(dv);
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách mã dịch vụ");
        } finally {
            cn.Close();
        }
        return danhSachMaDichVu;
    }

    public static DefaultTableModel addTable(ResultSet rs) throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        ResultSetMetaData metaData = rs.getMetaData();
        int totalColumn = metaData.getColumnCount();
        Object[] dataRow = new Object[totalColumn];

        if (rs != null) {
            for (int i = 1; i <= totalColumn; i++) {
                table.addColumn(metaData.getColumnName(i));
            }
            while (rs.next()) {
                for (int i = 1; i <= totalColumn; i++) {
                    dataRow[i - 1] = rs.getObject(i);
                }
                table.addRow(dataRow);
            }

        }
        return table;

    }

    public static DefaultTableModel layBangDichVu() throws Exception {
        DefaultTableModel bangDichVu = new DefaultTableModel();
        sqlString = "SELECT MaDichVu as [Mã Dịch Vụ], TenDichVu as [Tên Dịch Vụ], DonGia as [Đơn Giá]  FROM DICHVU";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            bangDichVu = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách dịch vụ");
        } finally {
            cn.Close();
        }
        return bangDichVu;
    }

    public static int Insert(DichVu_DTO d) throws Exception {
        int n;
        sqlString = "INSERT INTO DICHVU VALUES ('"
                + d.getMaDichVu() + "',N'"
                + d.getTenDichVu() + "','"
                + d.getDonGia() + "')";
        try {
            cn = new MSSQLConnect();
            n = cn.executeUpdate(sqlString);
        } catch (Exception e) {
            throw new Exception("Lỗi cơ sở dữ liệu");
        } finally {
            cn.Close();
        }
        return n;
    }

    public static int Delete(String maDichVu) throws Exception {
        int n;
        sqlString = "DELETE FROM DICHVU WHERE MaDichVu = '" + maDichVu + "'";
        try {
            cn = new MSSQLConnect();
            //Thực thi câu lệnh SQL
            n = cn.executeUpdate(sqlString);

        } catch (Exception e) {
            throw new Exception("Lỗi Kết Nối Cơ sở dữ liệu.");
        } finally {
            cn.Close();
        }
        return n;
    }
    //cập nhật phòng

    public static int Update(DichVu_DTO d) throws Exception {
        int n;
        sqlString = "UPDATE DICHVU SET TenDichVu = N'" + d.getTenDichVu()
                + "',DonGia = '" + d.getDonGia()
                + "' WHERE MaDichVu='" + d.getMaDichVu() + "'";
        try {
            cn = new MSSQLConnect();
            //Thực thi câu lệnh SQL
            n = cn.executeUpdate(sqlString);

        } catch (Exception e) {
            System.out.println(e.toString());
            throw new Exception("Lỗi Kết Nối Cơ sở dữ liệu.");
        } finally {
            cn.Close();
        }
        return n;
    }

    public static String taoMaTuDong(String maGoc, int batDau) throws Exception {
        String str, kq;
        int so;
        try {
            str = maGoc.substring(batDau);
            kq = maGoc.substring(0, batDau);
            so = Integer.parseInt(str) + 1;
            for (int i = 0; i < str.length() - Integer.valueOf(so).toString().length(); i++) {
                kq += "0";
                //return kq;
            }
            kq = kq + so;
        } catch (Exception x) {
            return null;
        }
        return kq;
    }
    
    //tìm kiếm
    public static DefaultTableModel layBangDichVuTheoTen(String ten) throws Exception {
        DefaultTableModel tb = new DefaultTableModel();
        sqlString = "SELECT MaDichVu as [Mã Dịch Vụ], TenDichVu as [Tên Dịch Vụ], DonGia as [Đơn Giá]  FROM DICHVU "
                + "WHERE TenDichVu like '%" + ten + "%'";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            tb = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách phòng");
        } finally {
            cn.Close();
        }
        return tb;
    }
    public static DefaultTableModel layBangDichVuTheoDonGia(java.lang.Float tu, java.lang.Float den) throws Exception {
        DefaultTableModel tb = new DefaultTableModel();
        sqlString = "SELECT MaDichVu as [Mã Dịch Vụ], TenDichVu as [Tên Dịch Vụ], DonGia as [Đơn Giá]  FROM DICHVU "
                + "WHERE DonGia BETWEEN " + tu + " and " + den + "";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            tb = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách phòng");
        } finally {
            cn.Close();
        }
        return tb;
    }
    public static boolean kiemTraDichVuCoTrongCTPhieuDichVu(String madv) throws Exception {
        int n = 0;
        sqlString = "SElECT COUNT(*) as [TT] FROM CTPHIEUDICHVU WHERE MaDichVu = '" + madv + "'";
        try {
            cn = new MSSQLConnect();
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                n = rs.getInt("TT");
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy trị giá phiếu đặc tiệc");

        } finally {
            cn.Close();
        }
        return n > 0;
    }
}
